package thread;
/**
 * 创建线程任务对象，其类型为Runnable类型，
 * 然后创建Thread对象，将Runnable类型的任务对象交给Thread对象
 */
class ThreadTask1 implements Runnable{
    @Override
    public void run() {
        String tName=Thread.currentThread().getName();
        while(true) {
            System.out.println( tName+ "->task01");
        }
    }
}
class ThreadTask2 implements Runnable{
    @Override
    public void run() {
        String tName=Thread.currentThread().getName();
        while(true) {
            System.out.println( tName+ "->task02");
        }
    }
}
public class ThreadDemo02 {
    /**
     * main方法会运行在主线程中，这个线程不是我们启动的线程，而是由JVM启动的线程
     * @param args
     */
    public static void main(String[] args) {
        //获取main方法运行在哪个线程，这个线程名字是什么
        System.out.println(Thread.currentThread().getName());
        //创建两个新的任务对象(类型为Runnable类型)
        ThreadTask1 task1=new ThreadTask1();
        ThreadTask2 task2=new ThreadTask2();
        //创建两个新的线程对象，并将任务交给线程对象
        Thread t1=new Thread(task1);
        Thread t2=new Thread(task2);
        //启动线程对象
        t1.start();//线程启动后获取了CPU会执行自己的run方法
        t2.start();
        //要求：参考34行代码，用匿名内部类方式实现线程对象创建
        Thread t3=new Thread(new Runnable() {
            @Override
            public void run() {
                String tName=Thread.currentThread().getName();
                while(true) {
                    System.out.println( tName+ "->task03");
                }
            }
        });
        t3.start();
        //要求：参考34行代码，用lambda表达式方式实现线程对象创建
        Thread t4=new Thread(()->{
             String tName=Thread.currentThread().getName();
             while(true) {
                System.out.println( tName+ "->task04");
             }
            }
       );
       t4.start();

    }
}
